package com.github.cosycode.web.base.post;

import java.io.Serializable;

/**
 * <b>Description : </b> 往前台传递调用信息的接口
 *
 * @author CPF
 * @date 2019/3/12 10:34
 **/
public interface IPostCode extends Serializable {

    /**
     * 获取代码
     *
     * @return 代码
     */
    default String code() {
        return this.getBean().getCode();
    }

    /**
     * 获取展示信息
     *
     * @return 展示信息
     */
    default String msg() {
        return this.getBean().getMsg();
    }

    /**
     * 获取解释信息
     *
     * @return 解释
     */
    default String desc() {
        return this.getBean().getDesc();
    }

    /**
     * 将 数据封装进 PostCodeBeanPool 中
     *
     * @param code 返回码
     * @param msg 返回码信息
     * @param desc 描述
     */
    default void putBean(String code, String msg, String desc) {
        PostCodeBeanPool.putBean(this, code, msg, desc);
    }

    /**
     * 从 PostCodeBeanPool 中获取 PostCodeBean
     *
     * @return 对应的 PostCodeBean
     */
    default PostCodeBean getBean() {
        return PostCodeBeanPool.getBean(this);
    }

    /**
     * 通过 Code 判断是否执行成功
     *
     * @param code postCode 的代码
     * @return postCode 的代码代表是否是成功
     */
    static boolean isSuccess(String code) {
        return code != null && code.startsWith("0");
    }

    /**
     * 判断是否执行成功
     *
     * @return 是否执行成功
     */
    default boolean isSuccess() {
        return isSuccess(this.code());
    }

    /**
     * 判断是否执行不成功
     *
     * @return 是否执行不成功
     */
    default boolean isNotSuccess() {
        return !isSuccess();
    }

    /**
     * 返回postCode的Json字符串信息
     * @return json 数据
     */
    default String toJsonString() {
        return "{\"code\" : \"" + code() + "\", \"msg\" : \"" + msg() + "\", \"desc\" : \"" + desc() + "\"}";
    }

}
